/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mrp.web;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.script.ScriptEngineManager;
import mrp.beans.HormaBean;
import mrp.beans.UsuarioBean;
import mrp.beans.util.JsfUtil;

import mrp.login.Login;
import org.primefaces.component.inputtext.InputText;
import mrp.persistencia.entity.Horma;

import java.io.PrintWriter;
import javax.faces.application.FacesMessage;


import javax.faces.context.ExternalContext;

import javax.servlet.http.HttpServletResponse;
/**
 *
 * @author root
 */
@ManagedBean(name="hormaWeb")
@SessionScoped
public class HormaWeb implements Serializable{
    
    @ManagedProperty("#{usuarioBean}")
    private UsuarioBean usuarioBean;
    @ManagedProperty("#{login}")
    private Login login;
    
//    @ManagedProperty("#{horma}")
    private HormaBean hormaBean;
    
    private Horma currentHorma;

    //_______________________________________________________________________________________________ 
    //----------------------------Componentes de ingreso--------------------------------
        private InputText textCodHorma;
        private InputText textNombreHorma;
        private InputText textTamanioHorma;
    
    //----------------------------Componentes de consulta--------------------------------
    //Atributos para cargar la tabla
        private List <Horma> tablaDatosHorma;
        private List <String> datosHormaSeleccionado;
        private Horma hormaSeleccionado; 
    
    //-----------------Componentes modificarDatos-----------------------    
        private Horma hormaActualizarDatos;
        
    //-----------------fin Componentes modificarDatos-----------------------    
        
    //_______________________________________________________________________________________________  
    //********************metodos Getters and Setters***************************

    public HormaWeb() {
//        currentHorma = new mrp.persistencia.entity.Horma();
        this.hormaBean=new HormaBean();
        
    }
        
//        public HormaBean getHorma() {
//            return horma;
//        }
//
//        public void setHorma(HormaBean horma) {
//            this.horma = horma;
//        }

    public HormaBean getHormaBean() {
        return hormaBean;
    }

    public void setHormaBean(HormaBean hormaBean) {
        this.hormaBean = hormaBean;
    }

    public Login getLogin() {
        return login;
    }

    public void setLogin(Login login) {
        this.login = login;
    }

    public UsuarioBean getUsuarioBean() {
        return usuarioBean;
    }

    public void setUsuarioBean(UsuarioBean usuarioBean) {
        this.usuarioBean = usuarioBean;
    }

   
        
        
    //-----------------Getters and Setters ingresar Horma---------------------------
    public InputText getTextCodHorma() {
        return textCodHorma;
    }

    public void setTextCodHorma(InputText textCodHorma) {
        this.textCodHorma = textCodHorma;
    }

    public InputText getTextNombreHorma() {
        return textNombreHorma;
    }

    public void setTextNombreHorma(InputText textNombreHorma) {
        this.textNombreHorma = textNombreHorma;
    }

    public InputText getTextTamanioHorma() {
        return textTamanioHorma;
    }

    public void setTextTamanioHorma(InputText textTamanioHorma) {
        this.textTamanioHorma = textTamanioHorma;
    }
 
    //-----------------Fin Getters and Setters ingresar Horma---------------------------

    //-----------------Getters and Setters consultar Horma--------------------------- 
    
    public List<String> getDatosHormaSeleccionado() {
        return datosHormaSeleccionado;
    }

    public void setDatosHormaSeleccionado(List<String> datosHormaSeleccionado) {
        this.datosHormaSeleccionado = datosHormaSeleccionado;
    }

    public Horma getHormaSeleccionado() {        
        return hormaSeleccionado;
    }

    public void setHormaSeleccionado(Horma hormaSeleccionado) {
        this.hormaSeleccionado = hormaSeleccionado;
    }

    public List<Horma> getTablaDatosHorma() {
        return tablaDatosHorma;
    }

    public void setTablaDatosHorma(List<Horma> tablaDatosHorma) {
        this.tablaDatosHorma = tablaDatosHorma;
    }

    public Horma getCurrentHorma() {
        return currentHorma;
    }

    public void setCurrentHorma(Horma currentHorma) {
        this.currentHorma = currentHorma;
    }
    
    
    //-----------------fin Getters and Setters consultar Horma--------------------------- 

  
  //-----------------Getters and Setters modificar Horma---------------------------   
    public Horma getHormaActualizarDatos() {
        return hormaActualizarDatos;
    }
    public void setHormaActualizarDatos(Horma hormaActualizarDatos) {
        this.hormaActualizarDatos = hormaActualizarDatos;
    }    
 //-----------------Fin Getters and Setters modificar Horma---------------------------

 //_______________________________________________________________________________________________    
   //*********************Metodos generales************************  
    public void initComponentes(String form)
    {
//        String form="formDialogoIngresarHorma";
       
//       this.setImputText(form,componentes);
        if(form.equals("formDialogoIngresarHorma")||form.equals("formDialogoModificarHorma"))
       {           
           String[] componentes={"textCodHorma","textNombreHorma","textTamanioHorma"};
           String[] componentes1={"textCodHormaModificar","textNombreHormaModificar","textTamanioHormaModificar"};
           if(form.equals("formDialogoModificarHorma"))
                componentes=componentes1;       
            this.setComponentes(form,componentes);//obtiene los datos de la vista web y los carga en los componentes de esta clase
            List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(form);
            this.setEstilosTodosComponentes(listaComponentesEstilos,form);
       }
    }
   public void setComponentes(String form, String [] componente)// setea los imputText de vistas de ingresarVendedor.xhtml y modificarDatosVendedor.xhtml con los componentes de esta clase
   {
       FacesContext facesContext = FacesContext.getCurrentInstance();
      
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();

       this.setTextCodHorma((InputText)root.findComponent(form).findComponent(componente[0]));
       this.setTextNombreHorma((InputText)root.findComponent(form).findComponent(componente[1]));                            
       this.setTextTamanioHorma((InputText)root.findComponent(form).findComponent(componente[2]));                            
    }
    public void resetComponentes()
    {        
        try{                  
            this.getTextCodHorma().setValue("");
            this.getTextNombreHorma().setValue("");  
            this.getTextTamanioHorma().setValue("");
            }
            catch(java.lang.NullPointerException npe)
            {
                System.out.println("-------------Excepcion en resetComponentes() "+npe);
            }
        System.out.println("-------------borrar datos");
    }  
    private List<String> getEstilosTodosComponentes(String form)
    {
        List<String>listaComponentesEstilos=new ArrayList<String>();
        if(form.equals("formDialogoIngresarHorma")||form.equals("formDialogoModificarHorma"))
        {
            listaComponentesEstilos.add(" width: 150px; font-size: 12px;left: 124px; top: 20px; position: absolute  ");
            listaComponentesEstilos.add(" width: 235px; font-size: 12px;left: 124px; top: 50px; position: absolute ");                      
            listaComponentesEstilos.add(" width: 150px; font-size: 12px;left: 124px; top: 80px; position: absolute ");                      
        }
      
        return listaComponentesEstilos;
    }
    private void setEstilosTodosComponentes(List<String>listaComponentesEstilos, String form)
    {
        if(form.equals("formDialogoIngresarHorma")||form.equals("formDialogoModificarHorma"))
        {
            this.getTextCodHorma().setStyle(listaComponentesEstilos.get(0).toString());
            this.getTextNombreHorma().setStyle(listaComponentesEstilos.get(1).toString());  
            this.getTextTamanioHorma().setStyle(listaComponentesEstilos.get(2).toString());  
        }                       
    }
    public List<Object> esCamposVacios(List<Object>listaComponentes, String form)
    {
        List listaEsVacio=new ArrayList<Object>();
        boolean vacio=false;
        String mensaje=".";
        
        if(form.equals("formDialogoIngresarHorma")||form.equals("formDialogoModificarHorma"))
        {
            List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(form);
            for(int i=1;i<listaComponentes.size();i++) // empieza en 1 porque el campo numeroLista se genera automaticamente al almacenar en la base de datos un nuevo registro
            {
                boolean isEmpty=true;
                try{
                    isEmpty=((InputText)listaComponentes.get(i)).getValue().toString().isEmpty(); 
                    if(i==2)
                    {
                        String str=((InputText)listaComponentes.get(i)).getValue().toString().trim();
                        if(!((!(str.matches("[0-9]* [0-9][/][0-9]")))==false||(!(str.matches("[0-9]*")))==false))
                        {
                            isEmpty=true;
                            mensaje="Error: Formato de numero invalido";
//                            JsfUtil.mostrarMensaje("error", "Error: Formato de numero invalido", "");                            
                        }
                    }
                }
                catch(java.lang.NullPointerException npe){
                    isEmpty=true;
                }
                if(isEmpty)
                {
                    ((InputText)listaComponentes.get(i)).setStyle(listaComponentesEstilos.get(i)+";border-color: crimson");
                    vacio=true;
                   System.out.println("-----------------listaComponentes.get(i)).setStyle(listaComponentesEstilos.get(i)");
//                    javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
//      
//                    javax.faces.component.UIViewRoot root = facesContext.getViewRoot();
                    
                    if(form.equals("formDialogoIngresarHorma"))
                    {
                        JsfUtil.mostrarDialogo("formDialogoIngresarHorma", "DialogoIngresarHorma", true);                        
                    }
                    else if(form.equals("formDialogoModificarHorma"))
                    {
                        JsfUtil.mostrarDialogo("formDialogoModificarHorma", "DialogoModificarHorma", true);                        
                    }
                }
            }
        }      
        JsfUtil.updateComponente(form,"");
        listaEsVacio.add(vacio);
        listaEsVacio.add(mensaje);
        return listaEsVacio;
    }
  //_______________________________________________________________________________________________               
  //*********************Metodos ingresar Horma***********************
   public void clicBotonResetearIngresarHorma()
   {
       String form="formDialogoIngresarHorma";
       String[] componentes={"textCodHorma","textNombreHorma","textTamanioHorma"};     
       this.setComponentes(form, componentes);
       this.setEstilosTodosComponentes(this.getEstilosTodosComponentes(form), form);       
       this.resetComponentes();
   }
   
   public void clicBotonIngresarHorma(String form) ///boton guardar Horma
   {
       System.out.println("ingreso metodio  toy acaaaaa!!!");
       this.initComponentes(form);
//       String[] componentes={"textCodHorma","textNombreHorma","textTamanioHorma"};       
//       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
//       String metodo="ingresarHorma";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodHorma());
       listaComponentes.add( this.getTextNombreHorma());                   
       listaComponentes.add( this.getTextTamanioHorma());
       
//       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
//       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       System.out.println("List<String>listaComponentes----- "+listaComponentes.get(0));
       List listaEsCamposVacios=this.esCamposVacios(listaComponentes,form);
       if(!((Boolean)(listaEsCamposVacios.get(0))))
       {           
//           this.getHorma().setHorma(new Horma("",this.getTextNombreHorma().getValue().toString().trim().toUpperCase(),
//                                                this.getTextTamanioHorma().getValue().toString().trim().toUpperCase()));
//           this.currentHorma=new Horma(); 
            if(this.getLogin().verificarLogin())
            {
                this.getHormaBean().setHorma(new Horma("", this.getTextNombreHorma().getValue().toString().trim().toUpperCase(),
                                                            this.getTextTamanioHorma().getValue().toString().trim().toUpperCase(),
                                                            Integer.parseInt(this.getUsuarioBean().getUsuario().getCodUsuario()),
                                                            new Date()));                
//                JsfUtil.mostrarMensajeJS("Horma Creada!", form, "");
//                 this.resetComponentes();                    
//                    JsfUtil.mostrarDialogo("formDialogoIngresarHorma", "DialogoIngresarHorma", false);
                List listaRespuestaIngreso=this.getHormaBean().ingresarHorma();
                if((Boolean)listaRespuestaIngreso.get(0))
                {
                    this.resetComponentes();                    
                    JsfUtil.mostrarDialogo("formDialogoIngresarHorma", "DialogoIngresarHorma", false);
                    JsfUtil.mostrarMensajeJS(listaRespuestaIngreso.get(1).toString());
                    this.buscarHorma();         
                    JsfUtil.updateComponente("","tablaConsultarHorma");
                    System.out.println(" horma creada");
                }
                else
                {
//                    this.resetComponentes();   
                    JsfUtil.updateComponente("formDialogoIngresarHorma", "DialogoIngresarHorma");
//                    JsfUtil.mostrarDialogo("formDialogoIngresarHorma", "DialogoIngresarHorma", true);
                    JsfUtil.mostrarMensajeJS(listaRespuestaIngreso.get(1).toString());
                }
            }
            else
            {
                JsfUtil.mostrarMensaje("error","No está ingresado al sistema","");
                JsfUtil.mostrarDialogo("formDialogoIngresarHorma", "DialogoIngresarHorma", false);
    //            this.borrarDatos();
            }
       }
       else
       {
           String msg="Error: Datos requeridos deben ser llenados";
           if(!(listaEsCamposVacios.get(1).toString().equals(".")))
               msg=listaEsCamposVacios.get(1).toString()+ ", datos requeridos deben ser llenados";
           JsfUtil.mostrarDialogo("formDialogoIngresarHorma", "DialogoIngresarHorma", true);
//           System.out.println("toy acaaaaa!!!");
           JsfUtil.mostrarMensajeJS(msg);
//           JsfUtil.mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");
           //this.mostrarConfirmDialogo("Ingresar Horma", "Error: Datos requeridos deben ser llenados");
       }
   }          
   //*********************fin Metodos ingresar Horma************************
   
   //*********************    Metodos consultar Horma************************
   public void buscarHorma()
   {      
        this.setTablaDatosHorma(this.getHormaBean().consultarHorma());            
   }
   public void mostrarDatosDialogoDatosHorma()
   {
        Horma hm=(Horma)this.getHormaSeleccionado();
        List<String> datos=new ArrayList<String>();
        datos.add("Codigo Horma:"+hm.getCodhorma());
        datos.add("       Horma:"+hm.getNombrehorma());
        datos.add("      Tamaño:"+hm.getTamanio());
        
        this.setDatosHormaSeleccionado(datos);  
       
   }
   public void eventoFilaSeleccionadaTablaConsultarHorma() 
   {//metodo carga los datos del ultimo horma seleccionado en el caso que se deseen actualizar
       Horma hm=(Horma)this.getHormaSeleccionado();      
       this.setHormaActualizarDatos(hm);       
       System.out.println("eventoFilaSeleccionadaTablaConsultarHorma "+hm.getCodhorma());
   }
   //********************* fin Metodos consultar Horma************************
   
   //*********************    Metodos modificar Horma************************
   public void clicBotonModificarHorma() //boton del toolbar
   {
       String form="formDialogoModificarHorma";
//       String[] componentes={"textCodHormaModificar","textNombreHormaModificar","textTamanioHormaModificar"};       
//       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
//       
//       String metodo="modificarHorma";
       this.initComponentes(form);
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodHorma());
       listaComponentes.add( this.getTextNombreHorma());                   
       listaComponentes.add( this.getTextTamanioHorma());
       
//       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
//       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       this.getTextCodHorma().setValue(this.getHormaActualizarDatos().getCodhorma());
       this.getTextNombreHorma().setValue(this.getHormaActualizarDatos().getNombrehorma());
       this.getTextTamanioHorma().setValue(this.getHormaActualizarDatos().getTamanio());
   }
   public void clicBotonActualizarDatosHorma()
   {
       String form="formDialogoModificarHorma";
//       String[] componentes={"textCodHormaModificar","textNombreHormaModificar","textTamanioHormaModificar"};       
//       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
//       
//       String metodo="modificarHorma";
       this.initComponentes(form);
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodHorma());
       listaComponentes.add( this.getTextNombreHorma());                   
       listaComponentes.add( this.getTextTamanioHorma());
      
//       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(form);
//       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
        List listaEsCamposVacios=this.esCamposVacios(listaComponentes,form);
       if(!((Boolean)(listaEsCamposVacios.get(0))))
       {    
           if(this.getLogin().verificarLogin())
            {
                this.getHormaBean().setHorma(new Horma(this.getTextCodHorma().getValue().toString(),
                                                        this.getTextNombreHorma().getValue().toString().trim().toUpperCase(),
                                                        this.getTextTamanioHorma().getValue().toString().trim().toUpperCase(),
                                                        Integer.parseInt(this.getUsuarioBean().getUsuario().getCodUsuario()),
                                                                    new Date())); 
                    List listaRespuestaIngreso=this.getHormaBean().modificarDatosHorma();
                    if((Boolean)listaRespuestaIngreso.get(0))
                    {
                        this.resetComponentes();                    
                        JsfUtil.mostrarDialogo("formDialogoModificarHorma", "DialogoModificarHorma", false);
                        JsfUtil.mostrarMensajeJS(listaRespuestaIngreso.get(1).toString());
                        this.buscarHorma();                    
                        JsfUtil.updateComponente("","tablaConsultarHorma");
                        System.out.println(" horma actualizada");
                    }
                    else
                    {
        //                JsfUtil.updateComponente("formDialogoIngresarHorma", "DialogoIngresarHorma");
                        JsfUtil.mostrarDialogo("formDialogoModificarHorma", "DialogoModificarHorma", true);
                        JsfUtil.mostrarMensajeJS(listaRespuestaIngreso.get(1).toString());
                    }
            }
            else
            {
                JsfUtil.mostrarMensajeJS("No está ingresado al sistema!");
                JsfUtil.mostrarDialogo(form, "DialogoModificarHorma", false);
    //            this.borrarDatos();
            }
//           this.horma.setHorma(new Horma(   this.getTextCodHorma().getValue().toString(),
//                                            this.getTextNombreHorma().getValue().toString().trim().toUpperCase(),
//                                            this.getTextTamanioHorma().getValue().toString().trim().toUpperCase()));
//            System.out.println("--------______Componentes no vacios");    
//            if(this.horma.modificarDatosHorma())
//            {
//                this.mostrarDialogo("formDialogoModificarHorma", "DialogoModificarHorma", false);
//                this.resetComponentes();
//                this.buscarHorma();
//            }            
       }
       else
       {
           String msg="Error: Datos requeridos deben ser llenados";
           if(!(listaEsCamposVacios.get(1).toString().equals(".")))
               msg=listaEsCamposVacios.get(1).toString()+ ", datos requeridos deben ser llenados";
           JsfUtil.mostrarDialogo("formDialogoIngresarHorma", "DialogoIngresarHorma", true);
           JsfUtil.mostrarMensajeJS(msg);      
       }
   } 
   //********************* fin Metodos modificar Horma************************
   
   //*************************Metodos eliminar Horma**************************
   public void clicBotonEliminarHorma()
    {
        System.out.println("clicBotonEliminarHorma Horma para Eliminar: "+this.getHormaActualizarDatos().getCodhorma());
        String datosHormaEliminar=this.getHormaActualizarDatos().getCodhorma();
        if(this.getLogin().verificarLogin())
        {
            List listaRespuestaIngreso=this.getHormaBean().eliminarHorma(datosHormaEliminar);
            if((Boolean)listaRespuestaIngreso.get(0))
            { 
                JsfUtil.refreshElementJS("dialogoEliminarHorma.hide();");
                JsfUtil.mostrarMensajeJS(listaRespuestaIngreso.get(1).toString());
                this.buscarHorma();                    
//                JsfUtil.updateComponente("formTablaConsultarHorma",":tablaConsultarHorma");                
                System.out.println(" horma eliminada");
            }
            else
            {
//                JsfUtil.updateComponente("formDialogoIngresarHorma", "DialogoIngresarHorma");                
                JsfUtil.mostrarMensajeJS(listaRespuestaIngreso.get(1).toString());
            }
        }
        else
        {
            JsfUtil.mostrarMensajeJS("No está ingresado al sistema!");            
//            this.borrarDatos();
        }
//        if(this.horma.eliminarHorma(this.getHormaActualizarDatos().getCodHorma()))
//        {
//            this.horma.mostrarMensaje("info", "Se ha eliminado horma: "+datosHormaEliminar,"");
//            this.buscarHorma();//recarga la tabla de datos de Hormas
//            System.out.println("Horma Eliminado: "+datosHormaEliminar);
//        }
//        else
//        {
//            this.horma.mostrarMensaje("error", "No se pudo eliminar Horma: " +datosHormaEliminar,"");
//             System.out.println("No se pudo eliminar Horma: "+datosHormaEliminar);
//        }
    }
   //*************************fin eliminar Horma**************************
   
}
